import cv2
import numpy as np
import logging

# 取两条分隔线的位置
def figure_out_pos_of_separator_line(main_chart):
    """
    从K线主图中提取价格线的纵坐标（Y坐标）数组
    :param main_chart: K线主图（包含盘前竞价与盘后交易）
    :return: 价格线坐标数组（shape: (宽度, )，每个元素是对应X的Y坐标；未找到则为-1）
    """
    if main_chart is None or main_chart.size == 0:
        logging.error("提取价格坐标失败：主图为空")
        return None
    
    # 1. 转为灰度图（简化处理）
    thresh = cv2.cvtColor(main_chart, cv2.COLOR_BGR2GRAY) # cv2.COLOR_BGR2GRAY
    height, width = thresh.shape  # 高度（Y范围：0~height-1），宽度（X范围：0~width-1）
    
    
    # # 3. 逐列扫描，记录每个X对应的价格线Y坐标
    # price_ys = np.full(width, height*.5, dtype=int)  # 初始化数组，-1表示未找到

    bool_judgment_twice = False # 判断连续两次[整列]是灰色线
    first_x = 0
    last_x = 0
    for x in range(width):
        # 获取当前列的所有像素（Y从0到height-1）
        column = thresh[:, x]
        
        len_of_origin_column = len(column)
        
        # 找到列中灰色像素的Y坐标（可能有多个，同时取出多个, 才能判断像素个数）
        gray_ys = np.where(column == 38)[0]  # 返回该列所有白色像素的Y索引
        len_of_gray_column = len(gray_ys)
        
        if(len_of_gray_column > len_of_origin_column/2):
            # TODO: 3. 判断连续两列是灰线
            if(bool_judgment_twice):
                if 0 == first_x:first_x=x
                last_x = x
            else:
                bool_judgment_twice = True
        else:
            bool_judgment_twice = False
    return [first_x,last_x]
